home *** CD-ROM | disk | FTP | other *** search
/ Freelog 121 / FreelogMagazineJuilletAout2014-No121.iso / Outils / Adobe-Air / adobe-air_13.exe / [0] / setup.swf / scripts / mx / utils / UIDUtil.as < prev    next >
Text File  |  2014-03-27  |  8KB  |  279 lines

  1. package mx.utils
  2. {
  3.    import flash.utils.ByteArray;
  4.    import flash.utils.Dictionary;
  5.    import mx.core.IPropertyChangeNotifier;
  6.    import mx.core.IUIComponent;
  7.    import mx.core.IUID;
  8.    import mx.core.mx_internal;
  9.    
  10.    use namespace mx_internal;
  11.    
  12.    public class UIDUtil
  13.    {
  14.       
  15.       private static var uidDictionary:Dictionary = new Dictionary(true);
  16.       
  17.       mx_internal static const VERSION:String = "3.0.0.0";
  18.       
  19.       private static const ALPHA_CHAR_CODES:Array = [48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70];
  20.        
  21.       
  22.       public function UIDUtil()
  23.       {
  24.          super();
  25.       }
  26.       
  27.       public static function fromByteArray(param1:ByteArray) : String
  28.       {
  29.          var _loc2_:Array = null;
  30.          var _loc3_:uint = 0;
  31.          var _loc4_:uint = 0;
  32.          var _loc5_:int = 0;
  33.          if(param1 != null && param1.length >= 16 && param1.bytesAvailable >= 16)
  34.          {
  35.             _loc2_ = new Array(36);
  36.             _loc3_ = 0;
  37.             _loc4_ = 0;
  38.             while(_loc4_ < 16)
  39.             {
  40.                if(_loc4_ == 4 || _loc4_ == 6 || _loc4_ == 8 || _loc4_ == 10)
  41.                {
  42.                   var _loc6_:*;
  43.                   _loc2_[_loc6_ = _loc3_++] = 45;
  44.                }
  45.                _loc5_ = param1.readByte();
  46.                _loc2_[_loc6_ = _loc3_++] = ALPHA_CHAR_CODES[(_loc5_ & 240) >>> 4];
  47.                var _loc7_:*;
  48.                _loc2_[_loc7_ = _loc3_++] = ALPHA_CHAR_CODES[_loc5_ & 15];
  49.                _loc4_++;
  50.             }
  51.             return String.fromCharCode.apply(null,_loc2_);
  52.          }
  53.          return null;
  54.       }
  55.       
  56.       public static function isUID(param1:String) : Boolean
  57.       {
  58.          var _loc2_:uint = 0;
  59.          var _loc3_:Number = NaN;
  60.          if(param1 != null && param1.length == 36)
  61.          {
  62.             _loc2_ = 0;
  63.             while(_loc2_ < 36)
  64.             {
  65.                _loc3_ = param1.charCodeAt(_loc2_);
  66.                if(_loc2_ == 8 || _loc2_ == 13 || _loc2_ == 18 || _loc2_ == 23)
  67.                {
  68.                   if(_loc3_ != 45)
  69.                   {
  70.                      return false;
  71.                   }
  72.                }
  73.                else if(_loc3_ < 48 || _loc3_ > 70 || _loc3_ > 57 && _loc3_ < 65)
  74.                {
  75.                   return false;
  76.                }
  77.                _loc2_++;
  78.             }
  79.             return true;
  80.          }
  81.          return false;
  82.       }
  83.       
  84.       public static function createUID() : String
  85.       {
  86.          var _loc3_:int = 0;
  87.          var _loc4_:int = 0;
  88.          var _loc1_:Array = new Array(36);
  89.          var _loc2_:int = 0;
  90.          _loc3_ = 0;
  91.          while(_loc3_ < 8)
  92.          {
  93.             var _loc7_:*;
  94.             _loc1_[_loc7_ = _loc2_++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
  95.             _loc3_++;
  96.          }
  97.          _loc3_ = 0;
  98.          while(_loc3_ < 3)
  99.          {
  100.             _loc1_[_loc7_ = _loc2_++] = 45;
  101.             _loc4_ = 0;
  102.             while(_loc4_ < 4)
  103.             {
  104.                var _loc8_:*;
  105.                _loc1_[_loc8_ = _loc2_++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
  106.                _loc4_++;
  107.             }
  108.             _loc3_++;
  109.          }
  110.          _loc1_[_loc7_ = _loc2_++] = 45;
  111.          var _loc5_:Number = new Date().getTime();
  112.          var _loc6_:String = ("0000000" + _loc5_.toString(16).toUpperCase()).substr(-8);
  113.          _loc3_ = 0;
  114.          while(_loc3_ < 8)
  115.          {
  116.             _loc1_[_loc8_ = _loc2_++] = _loc6_.charCodeAt(_loc3_);
  117.             _loc3_++;
  118.          }
  119.          _loc3_ = 0;
  120.          while(_loc3_ < 4)
  121.          {
  122.             _loc1_[_loc8_ = _loc2_++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
  123.             _loc3_++;
  124.          }
  125.          return String.fromCharCode.apply(null,_loc1_);
  126.       }
  127.       
  128.       public static function toByteArray(param1:String) : ByteArray
  129.       {
  130.          var _loc2_:ByteArray = null;
  131.          var _loc3_:uint = 0;
  132.          var _loc4_:String = null;
  133.          var _loc5_:uint = 0;
  134.          var _loc6_:uint = 0;
  135.          if(isUID(param1))
  136.          {
  137.             _loc2_ = new ByteArray();
  138.             _loc3_ = 0;
  139.             while(_loc3_ < param1.length)
  140.             {
  141.                if((_loc4_ = param1.charAt(_loc3_)) != "-")
  142.                {
  143.                   _loc5_ = getDigit(_loc4_);
  144.                   _loc3_++;
  145.                   _loc6_ = getDigit(param1.charAt(_loc3_));
  146.                   _loc2_.writeByte((_loc5_ << 4 | _loc6_) & 255);
  147.                }
  148.                _loc3_++;
  149.             }
  150.             _loc2_.position = 0;
  151.             return _loc2_;
  152.          }
  153.          return null;
  154.       }
  155.       
  156.       private static function getDigit(param1:String) : uint
  157.       {
  158.          switch(param1)
  159.          {
  160.             case "A":
  161.             case "a":
  162.                return 10;
  163.             case "B":
  164.             case "b":
  165.                return 11;
  166.             case "C":
  167.             case "c":
  168.                return 12;
  169.             case "D":
  170.             case "d":
  171.                return 13;
  172.             case "E":
  173.             case "e":
  174.                return 14;
  175.             case "F":
  176.             case "f":
  177.                return 15;
  178.             default:
  179.                return new uint(param1);
  180.          }
  181.       }
  182.       
  183.       public static function getUID(param1:Object) : String
  184.       {
  185.          var result:String = null;
  186.          var xitem:XML = null;
  187.          var nodeKind:String = null;
  188.          var notificationFunction:Function = null;
  189.          var item:Object = param1;
  190.          result = null;
  191.          if(item == null)
  192.          {
  193.             return result;
  194.          }
  195.          if(item is IUID)
  196.          {
  197.             result = IUID(item).uid;
  198.             if(result == null || result.length == 0)
  199.             {
  200.                result = createUID();
  201.                IUID(item).uid = result;
  202.             }
  203.          }
  204.          else if(item is IPropertyChangeNotifier && !(item is IUIComponent))
  205.          {
  206.             result = IPropertyChangeNotifier(item).uid;
  207.             if(result == null || result.length == 0)
  208.             {
  209.                result = createUID();
  210.                IPropertyChangeNotifier(item).uid = result;
  211.             }
  212.          }
  213.          else
  214.          {
  215.             if(item is String)
  216.             {
  217.                return item as String;
  218.             }
  219.             try
  220.             {
  221.                if(item is XMLList && item.length == 1)
  222.                {
  223.                   item = item[0];
  224.                }
  225.                if(item is XML)
  226.                {
  227.                   xitem = XML(item);
  228.                   nodeKind = xitem.nodeKind();
  229.                   if(nodeKind == "text" || nodeKind == "attribute")
  230.                   {
  231.                      return xitem.toString();
  232.                   }
  233.                   notificationFunction = xitem.notification();
  234.                   if(!(notificationFunction is Function))
  235.                   {
  236.                      notificationFunction = XMLNotifier.initializeXMLForNotification();
  237.                      xitem.setNotification(notificationFunction);
  238.                   }
  239.                   if(notificationFunction["uid"] == undefined)
  240.                   {
  241.                      result = notificationFunction["uid"] = createUID();
  242.                   }
  243.                   result = notificationFunction["uid"];
  244.                }
  245.                else
  246.                {
  247.                   if("mx_internal_uid" in item)
  248.                   {
  249.                      return item.mx_internal_uid;
  250.                   }
  251.                   if("uid" in item)
  252.                   {
  253.                      return item.uid;
  254.                   }
  255.                   result = uidDictionary[item];
  256.                   if(!result)
  257.                   {
  258.                      result = createUID();
  259.                      try
  260.                      {
  261.                         item.mx_internal_uid = result;
  262.                      }
  263.                      catch(e:Error)
  264.                      {
  265.                         uidDictionary[item] = result;
  266.                      }
  267.                   }
  268.                }
  269.             }
  270.             catch(e:Error)
  271.             {
  272.                result = item.toString();
  273.             }
  274.          }
  275.          return result;
  276.       }
  277.    }
  278. }
  279.